کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

برنامه نویسی اندروید در محیط اندروید استودیو

مقدمه ای بر برنامه سازی تحت موبایل برای سیستم عامل اندروید

سیستم عامل اندروید

Android یک سیستم عامل تحت موبایل و مبتنی بر هسته ی Linux است. پروژه ی توسعه و ارتقا اندروید AOSP یا پروژه ی کد باز اندروید نام دارد که شرکت Google آن را رهبری می کند.
سیستم عامل اندروید از چهار لایه تشکیل شده است، اما یک توسعه دهنده ی اندروید معمولا با دو لایه ی بالایی (Application و Application Framework) آن سروکار دارد.

سیستم عامل اندروید

معماری اندروید به شرح زیر می باشد:

  • لایه ی Application – پروژه ی کد باز اندروید دربردارنده ی چندین اپلیکیشن پیش فرض همچون مرورگر وب، اپلیکیشن استفاده از دوربین (Camera)، اپلیکیشن پخش موسیقی Music، اپلیکیشن برقراری تماس Phone و غیره ... می باشد. در واقع تمامی برنامه هایی که کاربران از آن ها استفاده می کنند در این لایه نصب شده و در درسترس کاربر قرار می گیرند.
  • لایه ی Application framework – یک API است که امکان برقراری تعامل سطح بالا از اپلیکیشن ها با سیستم اندروید را فراهم می آورد. این لایه عمده ی خدمات سطح بالا و مورد نیاز اپلیکیشن ها را در قالب کلاس های جاوا فراهم آورده و به برنامه نویس اجازه ی بهره گیری از این امکانات در توسعه ی اپلیکیشن را می دهد.
  • لایه ی Libraries و runtime – کتابخانه هایی که انجام کارهای معمول نظیر نمایش و ارائه ی خروجی گرافیکی (rendering)، ذخیره ی داده ها، قابلیت وبگردی را به صورت آماده فراهم می آورند. این لایه همچنین Runtime اندروید و کتابخانه های اصلی که امکان اجرای اپلیکیشن ها را فراهم می آورد، شامل می شود.
  • لایه ی هسته ی Linux – این لایه امکان ارتباط با سخت افزار را مهیا می سازد.

تاکنون ویرایش های متعددی از اندروید منتشر شده که در جدول زیر آن ها را مشاهده می کنید:

API level
Version
Code name
24
N
Nougat
23
6.0
Marshmallow
22
5.1
Lollipop
21
5.0
Lollipop
19
4.4 - 4.4.4
KitKat
16 - 18
4.1.x - 4.3.x
Jelly Bean
14 -15
4.0.1 - 4.0.4
Ice Cream Sandwich
13
3.2.x
Honeycomb
11 - 12
3.0 - 3.1
Honeycomb
9-10
2.3 - 2.3.7
Gingerbread
8
2.2.x
Froyo
7
2.1
Eclair
5 -6
2.0 - 2.0.1
Eclair
4
1.6
Donut
3
1.5
Cupcake
2
1.1
(no code name)
1
1.0
(no code name)

نحوه ی برنامه سازی برای سیستم عامل تحت موبایل اندروید

زبان برنامه نویسی که برای ساخت و توسعه ی اپلیکیشن اندروید بکار گرفته می شود، زبان شی گرا و همه منظوره ی Java است. به عبارت دیگر، برنامه نویس اندروید تمامی فایل های تنظیمات و منطق اپلیکیشن که برای یک برنامه ی کاربردی اندروید ضروری است را با زبان چند منظوره ی Java می نویسد.
Android development tooling (مجموعه ابزار ساخت و توسعه ی اپلیکیشن های اندروید) فایل هایی که توسط محیط کاری و برنامه نویس تولید شده را به اپلیکیشن اندروید تبدیل می کند. حال اگر برنامه نویس فرایند deployment را آغاز کند، کل اپلیکیشن اندروید به زبان ماشین ترجمه، کلاس های اپلیکیشن پوشه بندی و package شده (تحت یک namespace یا پوشه ی واحد سازمان دهی شده)، سپس برای اجرا تنظیم و آماده می شود (و در نهایت به اجرا در می آید).
(deployment فرایندی است که طی آن اپلیکیشن برای بهره برداری کاملا آماده می شود.)
SDK (مجموعه ابزار ساخت و توسعه ی اپلیکیشن اندروید) و Gradle (سیستم ترجمه و کامپایل کدها به زبان ماشین) ابزار لازم جهت ایجاد، کامپایل و package کردن (سازمان دهی یا دسته بندی کلاس ها تحت یک namespace واحد) اپلیکیشن های اندروید را بر عهده دارد. تیم توسعه دهندگان اندروید افزونه ی Gradle را جهت هدایت اپلیکیشن های اندروید به مرحله ی کامپایل فراهم می آورد که می توانید آن را از اینترنت دانلود کرده و بر روی محیط کاری Android Studio نصب نمایید.
SDK یا مجموعه ابزار ساخت و توسعه ی اپلیکیشن های اندروید، ابزار ADB (پل ارتباطی به دستگاه اندروید و اشکال زدایی اپلیکیشن) را نیز شامل می شود. ADB یک پل ارتباطی به دستگاه های واقعی و مجازی اندروید جهت مدیریت یا اشکال زدایی اپلیکیشن می باشد.

ADT/مجموعه ابزار ساخت و توسعه ی اپلیکیشن اندروید و محیط توسعه ی Android Studio

شرکت Google جهت توسعه و تست اپلیکیشن های اندروید، IDE یا محیط برنامه نویسی Android Studio را ارائه کرده و توصیه می کند. این محیط کاری خود از محیط برنامه نویسی IntelliJ برگرفته شده است.
در ADT ویرایشگرهای اختصاصی ویژه ی فایل های اندروید تعبیه شده. بیشتر فایل های تنظیمات اندروید مبتنی بر XML هستند. ویرایشگرهایی که از آن ها نام برده شد به شما امکان می دهند بین نسخه ی XML (حالت ویرایش) فایل و رابط کاربری ساخت یافته که امکان وارد کردن داده را مهیا می کند، راه گزینی (سویچ) نمایید.

پروسه ی تبدیل و ترجمه از کد برنامه به اپلیکیشن اندروید

توجه:

مطالبی که در بخش حاضر مطالعه می کنید مربوط به فرایند کامپایل بوده و برای توسعه ی اپلیکیشن ضروری نمی باشد. در صورت تمایل می توانید از آن رد شوید.

کامپایلر Java فایل های حاوی کد و دستورات (source file) جاوا را به فایل های کلاس (class file) تبدیل می کند. در واقع SDK اندروید در خود ابزاری به نام dx دارد که فایل های Java را به یک فایل اجرایی با پسوند .dex (Dalvik Executable) تبدیل می کند. تمامی فایل های کلاس اپلیکیشن داخل این فایل اجرایی قرار داده می شوند. در طول پروسه ی تبدیل، اطلاعات تکراری و غیر ضروری موجود در فایل های کلاس حذف شده و به طور بهینه سازمان دهی می شوند. به طور مثال، اگر یک متغیر String همزمان در چندین فایل کلاس وجود داشته باشد، فایل .dex تنها یک اشاره گر (reference) به این String را در خود نگه می دارد.
با توجه به توضیح بالا، فایل های .dex بسیار کم حجم تر از فایل های کلاس متناظر هستند.
فایل .dex و محتویات یک پروژه ی اندروید (resource) همچون تصاویر و فایل های XML همگی به صورت پکیج داخل فایل .apk (فایل Android package) قرار داده می شوند. این عملیات را برنامه ای به نام aapt انجام می دهد.
فایل .apk خروجی، تمامی داده های لازم برای اجرای اپلیکیشن را شامل می شود. حال کافی است این فایل را به وسیله ی ابزار adb (پل ارتباطی مدیریت دستگاه اندروید و اشکال زدایی اپلیکیشن) بر روی دستگاه اندروید نصب (deploy) کرد.
از ویرایش 5.0 به بعد اندروید، ART به عنوان سیستم مدیریت اجرای برنامه برای تمامی اپلیکیشن های اندروید مورد استفاده قرار می گیرد. ART از Ahead Of Time compilation (ترجمه ی کل کد برنامه به زبان ماشین به صورت یکجا در ابتدای اجرای اپلیکیشن) بهره می گیرد. حین نصب یک اپلیکیشن بر روی دستگاه اندروید، کد آن اپلیکیشن به زبان ماشین ترجمه می شود. این امر سبب می شود کد پس از کامپایل با افزایش 30 درصدی حجم مواجه شود، اما در زمان راه اندازی برنامه سرعت اجرا را بالا می برد.
از آنجایی که کد اپلیکیشن تنها به هنگام اجرا و راه اندازی اولیه اپلیکیشن به زبان ماشین ترجمه می شود، مصرف باتری به مراتب کاهش می یابد.
ابزار dex2oat فایل .dex تولید شده را به فرمت ELF تبدیل می کند. این فایل کد dex، کد ترجمه شده به زبان ماشین که مستقیما توسط پردازنده اجرا می شود (native code) و meta-data (اطلاعاتی پیرامون اپلیکیشن) را شامل می شود. فایل با نگه داشتن کد .dex امکان استفاده از ابزار جاری را همچنان فراهم می آورد.
عملیات مدیریت حافظه (garbage collection) در ART بهینه سازی شده، از این جهت مدت زمانی که اپلیکیشن ممکن است به طور موقت کند شده یا متوقف شود، کاهش می یابد.

فروشگاه مجازی Google Play

شرکت گوگل سرویسی به نام Google Play را ارائه می دهد که این سرویس یک فروشگاه مجازی است و برنامه نویسان می توانند اپلیکیشن خود را در آن برای استفاده ی کاربران به صورت رایگان و پولی عرضه کنند. کاربران، اپلیکیشن Google Play را نصب کرده و به واسطه ی آن برنامه های کاربردی دلخواه خود را از سرویس Google play دانلود و نصب می کنند.
اپلیکیشن Google Play یک سرویس ویژه کاربران ارائه می دهد که آن ها را از آپدیت و نسخه ی جدید یک نرم افزار آگاه می سازد. برای مثال زمانی که توسعه دهنده یک نسخه ی جدید از اپلیکیشن خود را در فروشگاه بارگذاری می کند، این سرویس بلافاصله کاربران جاری خود را از آن آپدیت مطلع ساخته و این آپدیت را در اختیار آن ها قرار می دهد.
Google play همچنین کتابخانه ها و سرویس هایی را ویژه ی برنامه سازان اندروید ارائه می دهد. به عنوان مثال می توان به سرویسی اشاره کرد که امکان استفاده و نمایش Google Maps را مهیا می سازد. ارائه ی این سرویس ها از طریق Google Play این مزییت را دارد که ویرایش های قدیمی اندروید نیز می توانند از آن ها استفاده کنند. Google می تواند آن ها را بدون اینکه نیازی به بروز آوری کلی سیستم عامل اندروید باشد، بروز رسانی کند.

نصب محیط برنامه نویسی Android Studio

سیستم مورد نیاز برای نصب Android Studio

می توان بر روی یک سیستم سخت افزاری متوسط به راحتی برای سیستم عامل اندروید برنامه نویسی کرد. هر چند برای شرایط مطلوب، بهتر است محیط سخت افزاری مدرن با پردازنده ی 2.6 گیگاهرتز و رم 8 گیگابایت استفاده نمایید. هارد SSD نیز می تواند به شدت در اجرا و راه اندازی سریع برنامه شبیه ساز اندروید موثر باشد.

ابزار لازم برای نصب و استفاده از سیستم عامل Linux

SDK اندروید 32 بیتی است، به همین جهت بر روی یک سیستم لینوکس 64 بیتی، می بایست پکیج ia32-libs را نصب نمایید. در نسخه ی Ubuntu می توانید این کار را با اجرای دستور زیر انجام دهید

                    apt-get install ia32-libs

چنانچه از نسخه ی دیگر Linux استفاده می کنید، توصیه می شود توضیحات و مستندات ارائه شده همراه با آن نسخه را در خصوص دستور مربوط مطالعه نمایید.

دانلود Android Studio از اینترنت

می توانید Android Studio را از آدرس http://developer.android.com/sdk/index.html دانلود نمایید.
دانلود در دو نسخه عرضه می شود: 1. یک نسخه فقط SDK Tools را شامل می شود 2. دیگری کل پکیج های Android Studio Packages را دربر می گیرد. شما می بایست Android Studio Package را دانلود نمایید.

دانلود Android Studio  از اینترنت

نصب محیط برنامه نویسی Android Studio

پروسه نصب بر روی سیستم عامل Windows آسان است، کافی است فایل اجرایی .exe را که از اینترنت دانلود کردید، اجرا نمایید. در سیستم عامل Max OSX کافی است Android Studio را با اشاره گر موس کشیده و در پوشه ی Applications جایگذاری نمایید.
در سیستم عامل Linux می بایست فایل ZIP دانلود شده را از حالت فشرده خارج ساخته و در مکان مناسب جایگذاری نمایید. به منظور راه اندازی پروسه ی نصب Android Studio، ابتدا به آدرس android-studio/bin/ داخل یک پنجره ی فرمان (terminal) پیمایش نموده و سپس دستور studio.sh را اجرا نمایید.
زمانی که پروسه ی نصب Android Studio را راه اندازی می کنید، این امکان در اختیار شما قرار می گیرد که تنظیمات مورد نیاز نسخه ی نصبی موجود را (برای مثال setting ویرایش قدیمی تر Android Studio که قبلا بر روی سیستم خود نصب کردید) به محیط جدید وارد نمایید.

نصب محیط برنامه نویسی Android Studio

باقی مراحل نصب را به صورت ویزاردی دنبال نمایید.

نصب محیط برنامه نویسی Android Studio نصب محیط برنامه نویسی Android Studio نصب محیط برنامه نویسی Android Studio

در آخرین صفحه ی نصب، بر روی دکمه ی Finish کلیک نمایید.

نصب محیط برنامه نویسی Android Studio

تمرین: شروع به کار با Android Studio

در این تمرین می توانید یک پروژه ی اندروید تعریف کرده، سپس دستگاه مجازی (VM) Android را بر روی آن راه اندازی نمایید.

ایجاد یک پروژه ی اندروید

جهت ساخت یک اپلیکیشن ساده ی اندروید، می توانید بر روی لینک Start a new Android Studio project کلیک نمایید و یا اگر قبلا یک پروژه ی اندروید ایجاد کردید، این مسیر را طی نمایید: File ▸New Project.

ایجاد یک پروژه ی اندروید

پروژه ی اندروید خود را با مقادیر زیر تنظیم نمایید (فیلدهای پنجره ی Create new project را با مقادیر زیر مقداردهی نمایید). محل ذخیره ی پروژه (مقدار فیلد project location) و اسم پکیج (فیلدpackage name ) از مقادیری که شما وارد می کنید، بر گرفته می شود. برای ویرایش اسم پکیج، کافی است بر روی لینک کوچک Edit کلیک نمایید.

Value
Property
Test App
Application name
android.vogella.com
Company Domain
com.vogella.android.testapp
Package Name
Latest
API (Minimum, Target, Compile with)
Empty Activity
Template
ایجاد یک پروژه ی اندروید ایجاد یک پروژه ی اندروید

اگر قبلا SDK را دانلود نکرده باشید، Android Studio به صورت خودکار SDK مورد نیاز را از اینترنت بارگیری می کند.

ایجاد یک پروژه ی اندروید

در پنجره ی Add an Activity to Mobile، قالب آماده ی Empty Activity را انتخاب نمایید.

ایجاد یک پروژه ی اندروید

در آخرین صفحه ی تنظیمات پروژه ی جدید، گزینه یBackwards Compatibility (قابلیت پشتیبانی از ویرایش های قبلی) را از حالت انتخاب خارج نمایید.

ایجاد یک پروژه ی اندروید

بررسی پروژه ی ایجاد شده

برنامه ی راهنما (wizard) اکنون یک پروژه ی Android برای شما ایجاد می کند. بد نیست ساختار و فایل های تولید شده ی پروژه را بررسی نمایید.

بررسی پروژه ی ایجاد شده

ایجاد یک دستگاه مجازی (AVD)

جهت ایجاد یک AVD، مسیر Tools ▸ Android ▸ AVD Managerرا طی نمایید. سپس بر دکمه ی Create Virtual Device… کلیک کنید.

ایجاد یک دستگاه مجازی (AVD)

تنظیمات دستگاه مجازی را مطابق تصویر زیر انتخاب و مقداردهی نمایید:

ایجاد یک دستگاه مجازی (AVD)

در صفحه ی بعدی، مقدار ستون API Level (کتابخانه های اندروید که بر روی دستگاه مجازی نصب می شوند) را بر روی 23 (بالاترین ورژن) تنظیم نمایید.

ایجاد یک دستگاه مجازی (AVD) ایجاد یک دستگاه مجازی (AVD)

در پایان بر روی دکمه ی Finish کلیک کنید. با این کار دستگاه مجازی با تنظیمات سخت افزاری انتخابی ایجاد شده و در زیر لیست نمایش AVD های موجود به نمایش در می آید.

راه اندازی دستگاه مجازی (AVD)

AVD مورد نظر را از لیست انتخاب نموده و سپس دکمه ی Play را فشار دهید.

راه اندازی دستگاه مجازی (AVD)

تست اپلیکیشن بر روی دستگاه مجازی (AVD)

جهت راه اندازی و تست اپلیکیشن خود بر روی محیط دستگاه مجازی، این مسیر را طی نمایید: Run ▸ Run 'app' . یک پنجره ی محاوره ای به نمایش در می آید که در آن می توانید دستگاه دلخواه خود برای میزبانی جهت نصب و اجرای اپلیکیشن (deploy) را انتخاب نمایید.

تست اپلیکیشن بر روی دستگاه مجازی (AVD)

اپلیکیشن شما با گذشت چند ثانیه بر روی محیط شبیه ساز به اجرا در می آید.

تست اپلیکیشن بر روی دستگاه مجازی (AVD)

SDK Manager

استفاده از Android SDK Manager

SDK Manager به شما این امکان را می دهد تا Package ها (پوشه هایی حاوی کتابخانه های اندروید) مورد نیاز یک ویرایش خاص از اندروید را نصب/حذف نمایید.
جهت دسترسی به SDK manager، این مسیر را نمایید: Tools ▸ Android ▸ SDK Manager و یا بر روی آیکون SDK Manager کلیک نمایید.

استفاده از Android SDK Manager

نصب نسخه ی مورد انتخاب سیستم عامل اندروید

در SDK Manager، نسخه ی دلخواه اندروید برای نصب را از نمای درختی انتخاب نموده و سپس دکمه ی Install را کیلک نمایید. همان طور که در تصویر زیر مشاهده می کنید، API 18 از کتابخانه های اندروید انتخاب شده و نصب می شود.

نصب نسخه ی مورد انتخاب اندروید

با کلیک بر روی دکمه ی OK پروسه ی نصب را آغاز نمایید.
در تب SDK Platforms، می توانید ورژن API یا کتابخانه های اندروید را برای نصب انتخاب نمایید. در تب SDK Tools نیز می توانید ابزار توسعه و ساخت اپلیکیشن را نصب نمایید.

نصب support library (کتابخانه ی پشتیبانی از API های جدید اپلیکیشن در نسخه های قدیمی تر آن)

Support Library این امکان را برای شما فراهم می آورد تا از قابلیت ها و امکانات ویرایش های بالاتر اندروید در نسخه های پایین تر آن استفاده نمایید. علاوه بر آن، این کتابخانه قابلیت هایی که به صورت جدا از Android عرضه می شود (unbundled)، همچون ابزارک (widget) RecycleView جهت نمایش بهینه ی لیست، را در اختیار شما قرار می دهد.
در حال حاضر ویرایش های متعددی از این کتابخانه وجود دارد: v4، v7 و v13. این کتابخانه ها هر یک برای ورژن های مربوطه قابل استفاده می باشند. به عنوان مثال، support library v7 برای دستگاه های اندروید که از کتابخانه های ورژن 7 (API 7) اندروید استفاده می کنند، قابل استفاده می باشد. لازم به ذکر است که نسخه های بالاتر support library برای عملکرد صحیح خود نیاز به ورژن های پایین تر دارند. به طور مثال، support library v7 برای عملکرد صحیح خود به کتابخانه ی v4 احتیاج دارد.

تست اپلیکیشن های اندروید بر روی محیط مجازی (ADV) یا دستگاه واقعی

محیط شبیه ساز اندروید (emulator) و دستگاه مجازی اندروید (ADV)

مجموعه ابزار اندروید (Android Tooling) در خود یک نرم افزار شبیه ساز (Android device emulator) دارد. این شبیه ساز AVD را اجرا می کند. AVD می تواند محیط و سخت افزار یک گوشی واقعی اندروید را شبیه سازی کند.
AVD ها این امکان را برای شما فراهم می کنند تا اپلیکیشن های اندروید خود را بر روی ورژن های مختلف اندروید با تنظیمات سخت افزاری مختلف تست کنید. حتی اگر هم یک دستگاه واقعی اندروید برای تست اپلیکیشن های خود دارید، لازم است نحوه ی کار با AVD ها را بیاموزید چرا که دستگاه های مجازی به شما اجازه می دهند برنامه ی کاربردی خود را بر روی ورژن های مختلف اندروید با تنظیمات سخت افزاری خاص اجرا و تست نمایید.
تنظیمات دلخواه دستگاه مجازی را می بایست در طول پروسه ی ایجاد AVD مشخص نمایید. این تنظیمات انتخاب کیفیت تصویر (resolution)، ورژن کتابخانه های اندروید (API version) و تراکم پیکسلی مد نظر را شامل می شود.
می توانید چندین AVD با تنظیمات مختلف تعریف نمایید و آن ها را همزمان اجرا کنید. این کار به شما اجازه می دهد به طور همزمان اپلیکیشن خود را بر روی چندین دستگاه با تنظیمات مختلف امتحان کنید.

نکته:

اگر AVD را حین راه اندازی اولیه متوقف نمایید، دستگاه مجازی خراب می شود. راه اندازی اولیه در دستگاه های قدیمی کمی زمان می برد. در دستگاه های جدید فرایند راه اندازی اولیه معمولا 1 تا 3 دقیقه طول می کشد.

پس از اجرای کامل AVD، می توانید GUI را به وسیله ی موس کنترل نمایید. شبیه ساز همچنین با ارائه ی منویی در سمت راست محیط، به شما امکان می دهد تا به دکمه های گوشی دسترسی داشته باشید. سعی کنید در طول پروسه ی توسعه ی اپلیکیشن، AVD را متوقف نکنید. چنانچه در اپلیکیشن خود تغییراتی را اعمال نموده و هم اکنون می خواهید نسخه ی جدیدی از آن را تست نمایید، بهتر است اپلیکیشن خود مجددا بر روی AVD مستقر (deploy) کنید.

Debug certificate (شناسنامه ی تاریخ تولید و ثبت اپلیکیشن) و تاریخ ابطال آن (expiry date)

اپلیکیشن های اندروید می بایست قبل از نصب بر روی دستگاه، امضا شده و کلید منحصر بفردی به آن تخصیص داده شود. در واقع در طول پروسه ی توسعه ی برنامه، محیط کاری Eclipse اپلیکیشن شما را به صورت خودکار با یک certificate یا امضای دیجیتالی خاص به نام debug key نشانه گذاری می کند تا امکان کپی برداری از آن وجود نداشته باشد.
حال این امضای دیجیتالی که به برنامه ی کاربردی تخصیص داده می شود، حدودا تا 365 روز اعتبار دارد. زمانی که این تاریخ به پایان می رسد، اپلیکیشن یک خطای زمان کامپایل (build error) صادر کرده و به شما اعلان می کند که certificate یا امضای دیجیتالی تخصیص داده شده به اپلیکیشن منقضی شده و دیگر معتبر نیست.
به منظور رفع این مشکل، کافی است فایل debug.keystore را حذف نمایید. محل ذخیره ی فایلی های اپلیکیشن به صورت پیش فرض در سیستم عامل OS X و Linux در آدرس ~/.android/ و در سیستم عامل ویندوز XP در آدرس C:\Documents andSettings\[username]\.android\ و در Vista و 7 در آدرس C:\Users\[username]]\.android\ می باشد.
دفعه ی بعد که اپلیکیشن را کامپایل (build) می کنید، ابزار کامپایل پروژه یک keystore به همراه debug key جدید برای اپلیکیشن تولید کرده و به آن اختصاص می دهد (key store = جهت تایید اعتبار id توسعه دهندگان مورد استفاده قرار می گیرد).

Google AVD در مقایسه با Android AVD

در طول ایجاد یک AVD، این اختیار را دارید که بین Android device یا Google device یکی را انتخاب نمایید.
یک AVD Android اغلب برنامه هایی از پروژه ی کد باز اندروید (Android Open Source Project) را شامل می شود. این در حالی است که یک AVD ساخته شده با API های Google معمولا کدهای اضافی (کتابخانه ها یا توابع اضافی) از Google را دربرمی گیرد.
AVD هایی که برای API های گوگل ایجاد می کنید به شما امکان می دهند تا اپلیکیشن هایی را که از سرویس های Google Play (به عنوان مثال سرویس های موقعیت یابی مانند Google Maps API) استفاده می کنند، تست نمایید.

بهینه سازی و افزایش سرعت اجرا با انتخاب GPU رایانه ی میزبان (تنظیمات آیتم ی Emulated Performance)

در طول فرایند تنظیم و آماده سازی یک محیط شبیه ساز برای تست برنامه (emulator)، می توانید یکی از دو گزینه ی Snapshot یا Use Host GPU را انتخاب نمایید.

توجه:

پنجره ی محاوره ای حاضر به شما اجازه می دهد هر دو گزینه را انتخاب نمایید. اما اگر هر دو گزینه را فعال نمایید، با خطا مواجه خواهید شد.

با انتخاب گزینه ی اول، هنگامی که شما برای دومین بار دستگاه را راه اندازی می کنید، می بینید که دستگاه مجازی با سرعت خارق العاده ای اجرا می شود. می دانید چرا؟ به این علت که به هنگام بستن دستگاه مجازی، AVD وضعیت و اطلاعات جاری خود را ذخیره می کند و طبیعتا با اجرای بعدی این وضعیت بلافاصله بازگردانده می شوند. چنانچه گزینه ی Use Host GPU را انتخاب نمایید، AVD مستقیما از کارت گرافیک سیستم میزبان برای پردازش و نمایش گرافیک بهره می گیرد که سرعت برنامه را در شبیه ساز به طور قابل توجهی بالا می برد.

بهینه سازی و افزایش سرعت اجرا

افزایش سرعت با انتخاب Intel image system

می توانید یک AVD را با image system مبتنی بر معماری ARM CPU یا Intel CPI اجرا نمایید. دستگاه مجازی که از Intel image system بهره می گیرد، در اجرا بر روی سخت افزار Intel/AMD نسبت به system image مبتنی بر ARM بسیار سریع تر عمل می کند. در شرح علت آن باید گفت که شبیه ساز نیازی ندارد که دستورات پردازنده ی ARM را بر روی کامپیوتر شما به Intel/AMD ترجمه کند. حقیقت این است که image تهیه شده از ARM بیشتر با دستگاه های اندروید مطابقت دارد، اما لازمه ی این است که پردازنده شبیه سازی شود و این افت سرعت را در پی دارد. x86 بسیار سریع تر است چرا که سعی می کند با استفاده از مکانیزم های مربوطه ی AVD کد را به صورت native اجرا کند.
Intel image را می توان به راحتی توسط Android SDK Manager برای API مربوطه نصب کرد. در محیط برنامه نویسی Android Studio، به هنگام ایجاد دستگاه مجازی، این اتفاق به صورت خودکار رخ می دهد. می توان تنظمیات لازم را از طریق package details انجام داد.

 فزایش سرعت با انتخاب Intel image system
نکته:

لازم به ذکر است که intel image برای تمامی ورژن های مجموعه کتابخانه های اندروید (API Level) در دسترس نیست

لازم است برای ویندوز درایورهای بیشتری دانلود و نصب نمایید.

 فزایش سرعت با انتخاب Intel image system

پس از دانلود، می توانید به فایل مورد نظر در محل قرار گیری فایل های نصبی اندروید در پوشه ی extras/intel دسترسی داشته باشید. برای نصب درایورها می بایست است فایل اجرایی .exe را کلیک نمایید. این مرحله ی اضافی برای سیستم عامل ویندوز ضروری است. صرفا دانلود درایور کافی نیست و باید آن را نصب نمایید.
پس از دانلود، می توانید یک AVD مبتنی بر شبیه ساز Intel ایجاد نمایید. شبیه ساز با سرعت چندان بیشتری راه اندازی نمی شود، اما سرعت اجرای خود اپلیکیشن بسیار سریع تر خواهد بود.

تست برنامه بر روی یک دستگاه واقعی اندروید

ابتدا در دستگاه اندروید خود به بخش setting مراجعه نموده و در آنجا قابلیت USB Debugging را فعال نمایید. برای این منظور مسیر رو به رو را طی کنید: ▸ USB-Debugging Settings ▸ Development Options.
شاید لازم باشد درایور مورد نیاز برای گوشی همراه خود را نیز نصب نمایید. برای سیستم عامل های Linux و Mac OX این درایور از پیش نصب شده و آماده (out of box) در اختیار شما قرار می گیرد، اما برای سیستم عامل Windows شما می بایست درایور مربوطه را خود نصب نمایید.

توجه:

پایین ترین ورژن اندرویدی که اپلیکیشن شما بر روی آن قابلیت اجرا دارد و به اصطلاح پشتیبانی می کند، می بایست با نسخه ی اندرویدی که بر روی دستگاه شما نصب است، سازگاری و هم خوانی داشته باشد.

زمانی که چندین دستگاه به کامپیوتر متصل کرده اید، می توانید مشخص کنید کدام یک مورد استفاده قرار گیرد. چنانچه تنها یک دستگاه به کامپیوتر وصل است، اپلیکیشن به صورت خودکار بر روی دستگاه مربوطه مستقر و نصب (deploy) می شود.

کامپوننت های (اجزای تشکیل دهنده) نرم افزاری یک اپلیکیشن اندروید

اپلیکیشن اندروید

اپلیکیشن اندروید در حقیقت یک موجودیت واحد و قابل نصب است که می توان آن را راه اندازی نموده و مستقل از دیگر اپلیکیشن های اندورید مورد استفاده قرار داد. اجزای تشکیل دهنده یا به اصطلاح کامپوننت های نرم افزاری دو اپلیکیشن می توانند بر اساس یک آبجکت به نام Intent به یکدیگر وصل شوند. به تعبیر دیگر با استفاده از آبجکت Intent می توان عملیات یا task هایی تعریف کرده که بین چندین اپلیکیشن رفت و آمد دارند و اطلاعاتی را بین این دو منتقل می کنند.
اپلیکیشن های اندروید به طور کلی از کامپوننت های نرم افزاری، فایل های حاوی دستورات جاوا (source files) و فایل های محتوا (resource files) تشکیل می شوند. کامپوننت های نرم افزاری اندروید هر یک به همراه شرح چیستی و کاربرد آن در زیر عنوان شده اند:

  1. کامپوننت Application: هر برنامه ی اندروید می تواند تنها یک کلاس Application داشته باشد که این کلاس قبل از دیگر کامپوننت های اندروید نمونه سازی می شود (یک نمونه یا آبجکت از این کلاس ساخته می شود). این جزء نرم افزاری همچنین آخرین کامپوننتی است که به هنگام خروج و بسته شدن برنامه، متوقف شده و چرخه ی حیات آن به اتمام می رسد.
    اگر خودتان به صورت صریح یک آبجکت از این کلاس نسازید، اندروید خود به صورت خودکار یکی برای شما ایجاد می کند.
  2. Activity: جز نرم افزاری که یک صفحه از اپلیکیشن را ارائه داده و کاربر با تعامل با آن فعل خاصی را انجام می دهد، برای مثال با یکی از مخاطبین تماس گرفته، از منظره ای عکس می گیرد، یک نقشه را بر روی نمایشگر گوشی خود مشاهده می کند یا ایمیلی را ارسال می کند. به هر activity یک پنجره اختصاص می یابد که در آن رابط کاربری و ظاهر برنامه (UI) ترسیم می گردد.به عبارت دیگر، Activity جز ء اصلی اپلیکیشن های اندروید است که از دو بخش تشکیل شده: 1. کلاس که کد و رفتار برنامه را در آن پیاده سازی می کنید 2. لایه ی گرافیکی. یک اپلیکیشن می تواند چندین activity داشته باشد. activity ها با استفاده از view ها و fragment ها ظاهر برنامه ی خود را ساخته و با کاربر تعامل برقرار می کنند.
  3. Service: یکی از اجزا تشکیل دهنده ی اپلیکیشن های اندروید که عملیاتی را انجام می دهد ولی رابط کاربری یا UI ندارد. به عبارت دیگر، یک کامپوننت نرم افزاری که در پس زمینه کار می کند و با کاربر هیچ تعاملی ندارد. سرویس ها می توانند با دیگر کامپوننت های اندروید ارتباط بر قرار کنند. به عنوان مثال broadcast receiver می تواند از طریق notification framework به کاربر درباره ی رخداد خاصی خبر بدهد.
  4. 4. Broadcast receiver: یک Broadcast receiver می تواند به پیغام ها سیستمی و intent ها گوش فرا دهد و به اصطلاح منتظر باشد اتفاق خاصی رخ دهد. در واقع زمانی که event مورد نظر رخ می دهد، receiver ای که به آن گوش فرا می دهد توسط سیستم اندروید مطلع می گردد.
    به عنوان مثال می توانید یک receiver تخصیص دهید که کار آن گوش دادن به پیغام های سیستمی یا intent ها است. یا receiver ای اعلان کنید که منتظر تغییر در وضعیت گوشی (زمانی که گوشی زنگ می زند) است.
    به عبارت دیگر سیستم اندروید رخدادهایی را که اتفاق می افتد توسط broadcast اعلان می کند و شما می توانید برای این رخدادها receiver تعریف کنید که به رخداد گوش داده و در زمان فعال شدن رخداد از آن مطلع شود.
    شما می توانید ویژه ی event مربوط به اتمام فرایند راه اندازی سیستم (boot)، یک receiver تعریف نمایید.
  5. 5. Content provider: یک جزء نرم افزاری که که رابط ساخت یافته یا یک پل ارتباطی به داده های اپلیکیشن فراهم می آورد. کامپوننت Content provider این قابلیت را دارد که داده های مورد نیاز چندین اپلیکیشن را در مکانی واحد به اشتراک گذاشته تا برنامه هایی که به این داده ها نیاز دارند بتوانند به آن داده ها دسترسی داشته و از آن ها استفاده کنند.

سیستم اندروید یک دیتابیس به نام SQLite دارد که به طور مکرر همراه با content provider مورد استفاده قرار می گیرد. دیتابیس داده ها را ذخیره می کند و سپس این داده ها توسط واسطی به نام provider در اختیار اپلیکیشن قرار می گیرد.

طراحی ظاهر و UI برنامه با استفاده از fragment ها، view ها و layout manager ها

Fragment ها کامپوننت هایی هستند که در بستر (context) یک activity که همان فرم در اندروید است، اجرا می شوند. fragment ها با کپسوله سازی کدهای اپلیکیشن در خود امکان استفاده ی مجدد از آن ها در activity های مختلف را فراهم آورده و همچنین توسعه دهنده را قادر می سازد برای دستگاه های اندروید با اندازه صفحه متفاوت UI داینامیک و انعطاف پذیر تعریف کنند.
تصویر زیر یک activity به نام MainActivity را به نمایش می گذارد. Activity حاضر، در نمایشگر کوچک، تنها یک fragment را برای کاربر نمایش می دهد. این در حالی است که همین activity، به هنگام نمایش در دستگاه تبلت هر دو fragment را همزمان در یک صفحه به نمایش می گذارد.

طراحی ظاهر و UI برنامه

View ها ابزارک های رابط کاربری (UI Widget) همچون دکمه یا text field هستند که به وسیله ی attribute می توان رفتار و ظاهرشان را تنظیم و ویرایش کرد.
در اندروید مفهومی به نام ViewGroup وجود دارد. ViewGroup خود یک view است که نقش میزبان یا ظرف را برای دیگر view ها (که در اصطلاح view های فرزند آن خوانده می شوند) ایفا می کند. به این view میزبان در اندروید layout manager نیز گفته می شود چرا که قادر است چینش view های دیگر را مدیریت کند.
کلاس پایه که layout manger ها از آن ارث بری می کنند android.view.ViewGroup است . این کلاس خود از android.view.View که کلاس پدر تمامی view ها است مشتق می شود.
می توان با قرار دادن layout manager ها در دل یکدیگر (تودرتو کردن آن ها)، layout یا قالب های ترکیبی و پیچیده تری ایجاد کرد.

ابزارک های رابط کاربری یا widget های مورد استفاده در صفحه ی اصلی (home screen widget)

Widget ها یا ابزارک های رابط کاربری که در صفحه ی اصلی موبایل به نمایش در می آیند، در واقع یک سری broadcast receiver هستند که کامپوننت های تعاملی ارائه می دهند. شما از طریق این کامپوننت ها می توانید به بخش هایی از برنامه در صفحه ی اصلی موبایل (home screen) دسترسی داشته باشید. به عنوان مثال، یک ابزارک می تواند به کاربر اجازه دهد خلاصه ای از ایمیل های جدید را مشاهده کند و زمانی که کاربر بر روی ایمیل دلخواه خود کلیک کرد، کاربر را به صفحه ی مربوطه در اپلیکیشن هدایت کند.
Live wallpapers به شما این امکان را می دهند تا background های متحرک و پویا برای نمایش در صفحه ی اصلی سایت خود ایجاد کنید.

کلاس Context

نمونه یا آبجکت های ایجاد شده از کلاس android.content.Context ، اتصال/امکان دسترسی به سیستم اندروید و دستگاهی که اپلیکیشن بر روی آن اجرا می شود را فراهم می آورد. به عبارت بهتر، نمونه های این کلاس به سیستم، منابع و سرویس های اپلیکیشن دسترسی دارند.
برای مثال، می توانید به وسیله ی Context اندازه ی دقیق صفحه نمایش دستگاه جاری را بدست بیاورید.
Activity ها و سرویس ها از کلاس Context ارث بری می کنند.

فایل تنظیمات اندروید (manifest)

تنظیمات اپلیکیشن های اندروید

کامپوننت ها، تنظیمات و metadata یک اپلیکیشن اندروید در فایل AndroidManifest.xml آن که فایل تنظیمات در سیستم اندروید است، قید می شود.
تمامی activity ها، سرویس ها و کامپوننت های content provider اپلیکیشن باید در این فایل و به صورت static تعریف شوند. اما Broadcast receiver را می توان به صورت static در فایل manifest یا به صورت dynamic و در زمان اجرا در اپلیکیشن تعریف کرد. سیستم اندروید این فایل تنظیمات را به هنگام نصب اپلیکیشن خوانده و سپس با توجه به اطلاعات داخل آن، قابلیت ها و امکانات متعدد اپلیکیشن مورد نظر را شناسایی می کند.
Gradle، سیستم کامپایل و دسته بندی کلاس های اندروید تحت یک پوشه ی واحد (build&packaging)، می تواند فایل manifest را ایجاد کرده و در اختیار شما قرار دهد. برای مثال، ورژن اپلیکیشن معمولا توسط فایل gradle build عرضه می شود.

نمونه ای از فایل تنظیمات اندروید (manifest)

در زیر نمونه ای از یک فایل ساده ی تنظیمات اندروید (manifest) را مشاهده می کنید:


                
                
                
                
                
                
                
            
        
                
        
                
        
                
        
    

خصیصه ی Package و تعین نسخه های اپلیکیشن با استفاده از خصیصه های Version در فایل تنظیمات (manifest)

در فایل تنظیمات attribute یا خصیصه ای به نام package مشاهده می شود که اسم پکیجی که آبجکت ها (کلاس های) جاوا مورد اشاره در این فایل، داخل آن قرار دارند را مشخص می کند. در صورتی که یک آبجکت جاوا داخل پکیج دیگری قرار دارد، در آن صورت لازم است اسم کامل پکیج قید شود.
برای عرضه ی اپلیکیشن در فروشگاه مجازی Google play، آن اپلیکیشن باید یک اسم پکیج اختصاصی و منحصر بفرد داشته باشد. توصیه می شود برای اسم پکیج، اسم دامنه ی اپلیکیشن خود را به صورت وارونه بکار ببرید. بدین وسیله یک معرف یکتا برای اپلیکیشن اعلان می کنید که آن را از دیگر اپلیکیشن ها برای سیستم اندروید تمییز می دهد.
android:versionName و android:versionCode ورژن اپلیکیشن را مشخص می کنند. versionName اسم قابل مشاهده برای کاربرانی است که اپلیکیشن را بارگیری و نصب می کنند و هر می تواند هر مقدار رشته ای باشد.
مقدار versionCode باید یک عدد صحیح یا integer باشد. به وسیله ی این مقدار عددی Google play هم خود اپلیکیشن را شناسایی می کند و هم نسخه های جدید و آپدیت های آن را دنبال می کند. مقدار این خصیصه معمولا در اولین ورژن بر روی 1 تنظیم می شود و همین طور که ویرایش های جدید از آن منتشر می شود، این مقدار بالا می رود.

تگ (یک ظرف برای اجزا) و کامپوننت های دیگر

به شما این امکان را می دهد تا برای اپلیکیشن خود metadata بنویسید (اطلاعاتی را پیرامون برنامه ی خود ارائه دهید) و علاوه بر آن یک کلاس application به صورت صریح تعریف نمایید. این تگ همچنین می تواند ظرفی برای تعریف دیگر کامپوننت های اندروید باشد. توسط تگ یک کلاس activity تعریف می شود. در این تگ خصیصه (attribute) name به کلاسی اشاره دارد که اگر به طور کامل قید نشده باشد، نسبت به پکیجی که در خصیصه ی package آن اپلیکیشن قید کردید، آدرسی دهی می شود. در واقع بیانگر این است که اپلیکیشن می تواند با این activity اجرا شود و این activity نقطه ی اجرا برنامه می باشد. پارامتر نیز اعلان می دارد که activity حاضر بایستی به لانچر اضافه شود (در لیست اپلیکیشن های دستگاه به صورت فایل اجرایی ارائه شود). مقدار <@string />app_name> به فایل های محتوا (resource) اشاره دارد که اسم اپلیکیشن در آن تعریف شده است. با بهره گیری از فایل های محتوا می توان به راحتی منابع، محتوای مختلف (مقادیر رشته ای، رنگ و آیکون برنامه) و مورد نیاز هر اپلکیشن را فراهم نموده و همچنین زبان برنامه را به راحتی تنظیم کرد (اطلاعات مربوط به زبان برنامه را فراهم و آن را ترجمه کرد). تگ service، receiver و provider نیز می توانند مانند activity، نقش ظرف را برای تعریف دیگر کامپوننت و اجزا اندروید ایفا کنند.

تعیین پایین/بالاترین نسخه ی اندروید که برنامه بر روی آن اجرا می شود (خصیصه های minSdkVersion و targetSdkVersion)

بخش uses-sdk در فایل تنظیمات به شما این امکان را می دهد که پایین ترین نسخه و همچنین نسخه ی مورد نظر از اندروید که می خواهید اپلیکیشن بر روی آن قابل اجرا باشد را به ترتیب از طریق attribute های minSdkVersion و targetSdkVersion مشخص نمایید.

  1. minSdkVersion: این خصیصه به شما امکان می دهد پایین ترین ویرایش اندروید که اپلیکیشن شما بر روی آن قابل اجرا می باشد را مشخص نمایید. مقداری که اینجا مشخص می کنید در واقع به منزله ی یک فیلتر در فروشگاه مجازی Google Play مورد استفاده قرار می گیرد، به طوری که دستگاه هایی که اندروید نصب شده بر روی آن پایین تر از مقدار مشخص شده در این attribute است، امکان نصب آن را پیدا نمی کنند.
  2. targetSdkVersion: مقدار این attribute نشانگر ورژنی از سیستم عامل اندروید است که اپلیکیشن در اصل ویژه ی آن طراحی و بر روی آن تست شده است. لازم به ذکر است که این مقدار برابر ورژن کتابخانه های اندروید یا API version دستگاه نیست. سیستم اندروید ممکن است جهت سازگاری و قابلیت اجرای برنامه بر روی ورژن های جدید یا قدیمی تر تغییراتی را اعمال کند (forward/backward compatibility). توصیه می شود این attribute را جهت بهره وری از آخرین امکانات اندروید، برابر آخرین API version قرار دهید.

تعیین مجوزهای دسترسی با استفاده از تگ permission

فایل تنظیمات اندروید (manifest) همچنین می بایست مجوزهای لازم را مشخص کند. به عنوان مثال، در صورتی که اپلیکیشن به اینترنت نیاز دارد، مجوز دسترسی به آن باید در این فایل تعریف و اعطا شود. اپلیکیشن با استفاده از تگ به سیستم اندروید اعلان می کند که به مجوز خاصی احتیاج دارد. برخی از مجوزها، همچون دسترسی به اینترنت، از اندروید 6.0 به بعد به صورت خودکار اعطا می شوند. اما برخی دیگر جهت فعال شدن به تاییدیه ی کاربر نیاز دارند.

در فایل تنظیمات (manifest) اندروید همچنین بخشی به نام uses-configuration وجود دارد که روش های دریافت ورودی برای دستگاه را مشخص می کند. برای مثال، تکه کد زیر اعلان می کند که دستگاه مورد نظر بایستی از صفحه کلید مجزا (به صورت سخت افزاری) برخوردار باشد.

                    

بخش uses-feature به شما این امکان را می دهد تا سیستم سخت افزاری که دستگاه میزبان اپلیکیشن باید داشته باشد را مشخص نمایید. به عنوان مثال، تکه کد زیر اعلان می کند که دستگاه مورد نظر باید برای اجرای اپلیکیشن و بهره وری از قابلیت های آن، دوربین داشته باشد.

                

تعیین محل نصب (خصیصه ی installLocation)

به واسطه ی خصیصه ی installLocation می توانید مشخص کنید آیا اپلیکیشن شما اجازه یا امکان نصب بر روی حافظه ی خارجی دستگاه را دارد یا خیر. برای اعطای این مجوز کافی است attribute ذکر شده را با یکی از دو مقدار auto یا preferExternal برابر قرار دهید.
در حقیقت، این امکان به ندرت مورد استفاده قرار می گیرد چرا که اپلیکیشن (مسقر بر روی حافظه ی خارجی) به مجرد وصل شدن به کامپیوتر و استفاده از آن به عنوان یک حافظه ی USB، بلافاصله متوقف می شود.

فایل های محتوا (Resources)

اندروید به شما اجازه می دهد فایل های محتوای پروژه ی خود را به صورت مجزا و جدا از کد برنامه (source code) در قالب منابع static (فایل های تنظیمات مبتنی بر XML ، عکس، متن و غیره ...) تعریف نمایید.
فایل های محتوا بایستی داخل پوشه ی /res اپلیکیشن شما، در زیرپوشه ای از پیش تعریف شده جایگذاری شود. این زیرپوشه معمولا به نوع محتوایی که در آن قرار داده می شود، بستگی دارد. در صورت لزوم می توانید شناسه های بیشتری به اسم پوشه الصاق نموده و از این طریق مشخص نمایید محتوای مربوطه باید برای تنظیمات خاصی مورد استفاده قرار گیرد. این شناسه ها در اصطلاح resource qualifier خوانده می شوند. به عنوان مثال، می توانید مشخص کنید که فایلlayout یا تنظیم چیدمان های المان رابط کاربری فقط برای اندازه صفحه ی خاصی قابل استفاده می باشد.
جدول زیر توضیح مختصری در خصوص منابع (resource) مورد پشتیبانی و پیشوند مربوطه ی هر یک ارائه می دهد.

شرح
پوشه ی مربوطه
Resource یا محتوای مورد نظر
فایل های تصویری (برای مثال png، jpeg)/drawable های برداری (vector)، فایل های XML که به طور خودکار خود را متناسب با تراکم پیکسلی نمایشگر اندازه بندی و تنظیم می کنند را دربرمی گیرد. می توان از طریق کلاس R.drawable به آن ها دسترسی داشت.
/res/drawables
Drawables
داخل این فایل مقادیر متنی یا رشته ای، رنگ ها، ابعاد و اندازه، استایل ها و آرایه ای از رشته ها یا اعداد صحیح در قالب فایل XML تعریف و ذخیره می شوند. به طور قرار دادی، هر نوع در پوشه ی جدا و مختص به خود قرار می گیرد، برای مثال مقادیر رشته ای در آدرس res/values/strings.xml ذخیره می شوند.
res/values
Simple Values
فایل های XML با مقادیر مربوط به layout اپلیکیشن که امکان طراحی محیط کاربری با activity ها و fragment ها را فراهم می آورند در این مسیر نگهداری می شوند.
/res/layout
Layouts
فایل هایی که ظاهر و سبک نمایش اپلیکیشن اندروید را تعریف می کنند.
/res/values
Styles and themes
می توانید دستورات انیمیشن را به صورت xml داخل این فایل (برای کار با animation API) تعریف کنید که به شما اجازه می دهد مقادیر property های آبجکت را جهت اجرای انیمیشن و ادامه ی آن تا مدت زمان خاص، ویرایش نمایید. به عبارت دیگر فایل های ویژگی های انیمیشن را تعریف می کنند، در این مسیر ذخیره می شوند.
/res/animator
Animations
داده هایی که می خواهید با فرمت خام خود ذخیره شوند را در این فایل تعریف می کنید. می توانید از طریق آبجکت InputStream به راحتی به آن ها دسترسی داشته باشید. در واقع بهتر است فایل های که فرمت آن ها با دیگر فایل متفاوت است در این پوشه جایگذاری نمایید.
/res/raw
Raw data
فایل های XML ای که منوهای اپلیکیشن را تشکیل می دهند در این پوشه قرار دارند. برای دسترسی به آن ها کافی است از R.menu استفاده نمایید.
res/menu
Menus

نمونه فایل resource (تعریف تعدادی ثابت رشته ای، آرایه ی رشته ای، ثابت رنگ و ابعاد)

به یک نمونه فایل resource می توان به values.xml در پوشه ی /res/values اشاره کرد. این فایل دربردارنده ی تعدادی ثابت رشته ای، آرایه ی از نوع رشته، ثابتی حاوی مقدار رنگ و ثابتی حاوی مقدار ابعاد می باشد.



                Test
                Settings
                Hello world!
                
                Ubuntu
                Android
                Microsoft Windows
    
                #ffff0000
                10dp

فایل های resource و R.java

سیستم build و کامپایل اندروید به تمامی فایل های محتوا و resource های مربوطه در پوشه ی res، یک ID منحصر بفرد تخصیص می دهد. اندروید سپس یک فایل به نام R.java ایجاد می کند که مقادیر این ID ها را در خود ذخیره می کند. ID ها (اشاره گرها) در واقع مقادیر static و عددی از نوع int هستند.
بلافاصله پس از ایجاد یک فایل resource جدید، ID متناظر با آن به صورت خودکار در فایل R.java ایجاد می شود. نیازی به تغییرات دستی در فایل R.java نیست و در صورت اعمال چنین تغییراتی هم، Android development tooling آن ها را بازنویسی می کند. سیستم اندروید تعدادی متد ارائه می دهد که ID مربوط به یک resource را به عنوان آرگومان پذیرفته و فایل resource متناظر آن را بازیابی می کند.
برای مثال، جهت دسترسی به یک String با ID منحصر بفرد R.string.yourString در کد برنامه، شما می بایست متد getString(R.string.yourString) از کلاس Context را فراخوانی نمایید.

فایل های Layout (فایل های چیدمان رابط کاربری)

Activity ها (یا فرم ها در اندروید) ظاهر و UI خود را با استفاده از view ها (widget یا ابزارک های رابط کاربری) و fragment ها می سازند. در سیستم عامل اندروید کدهای مربوط به چیدمان المان های UI و طراحی رابط کاربری در قالب فایل های محتوا مبتنی بر XML در پوشه ی
/res/layout_ تعریف می شوند یا در قالب کد جاوا نوشته و ذخیره می گردند. در صورت تمایل می توانید تلفیقی از دو روش را بکار ببرید، هر چند روش اول بیشتر توصیه می شود. بدین وسیله می توان منطق برنامه (programming logic) را از ظاهر آن (layout definition) جدا کرد. همچنین این امکان بوجود می آید که برای هر دستگاه ظاهر و فایل layout ویژه ای تعریف نمایید.
فایل محتوا (resource file) که کدهای UI برنامه از آن خوانده می شوند در اصطلاح برنامه نویسی اندروید layout گفته می شود. Layout یا فایل تنظیم چیدمان المان های رابط کاربری تمامی view ها، ViewGroup ها و رابطه میان آن ها و attribute های آن ها را در قالب فایل های XML تعریف می کنند.
کد زیر یک نمونه ساده از فایل layout را به نمایش می گذارد.


                

فایل layout با فراخوانی متد setContentView به یک activity جهت نمایش در UI تخصیص می یابد، مانند زیر:

package com.vogella.android.first;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

افزایش سرعت و کارایی با استفاده از layout های ساده

محاسبه، پردازش و ترسیم view ها یک عملیات سنگین بوده و منابع و محتوای حجیمی را شامل می شود. شما بایستی تا حد امکان از layout های ساده استفاده نمایید تا سرعت اجرا و کارایی کلی برنامه بهبود یابد. برای مثال، بهتر است در شرایطی که یکmanager layout ساده کفایت می کند، از تودرتو سازی بیش از حد layout manager ها خودداری نمایید.

رهنمودها و روش های بهینه در خصوص ID های اختصاص داده شده به فایل های محتوا/resource

به منظور دسترسی به یک view از کد جاوا یا XML، لازم است با تنظیم مقدار attribute ای به نام android:id، به view دلخواه ID یا شناسه ی منحصر بفردی تخصیص دهید. جهت تخصیص یک ID جدید به view مورد نظر، کافی است خصیصه ی android:id از المان متناظر را در فایل layout با مقدار دلخواه تنظیم نمایید.
SDK یا مجموعه ابزار ساخت توسعه برنامه های اندرویدی، از سیستم نشانه گذاری camelCase برای نگارش مقدار ID بهره می گیرد. مثال: buttonRefresh. توصیه می شود شما نیز از همین سیستم استفاده نمایید.
در نمونه ی زیر می بینید که با تنظیم مقدار attribute نام برده (خصیصه ی android:id المان مربوطه) بر روی پارامتر رشته ای "@+id/button1"، به المان دکمه یک شناسه ی منحصر بفرد اختصاص داده می شود. طبق قراردادهای تعریف شده، این دستور یک ID جدید در فایل R.java ایجاد کرده و سپس آن را به view مربوطه انتساب می دهد.

                

توصیه می شود تمامی ID ها را در یک فایل تنظیمات (Config) واحد تعریف نمایید. این فایل معمولا ids.xml نام گذاری شده و در پوشه ی /res/values جایگذاری می شود. با این کار شما می توانید ID های از پیش تعریف شده را در فایل layout مورد استفاده قرار دهید. لازم به ذکر است که شما می توانید ID ها را در فایل جداگانه تعریف نمایید، اما در آن صورت بایستی آیتم @+id را از فایل های layout خود حذف نمایید چرا که در غیر این صورت با یک پیغام خطا مبنی بر اینکه این فایل ها قبلا ساخته شده اند مواجه می شوید. کد زیر نمونه ای از این فایل را به نمایش می گذارد.



                


                

توجه:

روشی که هم اکنون از آن نام برده شده برای پروژه های واقعی بسیار کارامد و مناسب می باشد. اما در آموزش حاضر، به علت زمان بر بودن این پروسه، مورد استفاده قرار نمی گیرد.

محتوای و منابعی که توسط سیستم اندروید ارائه می شود (system resources)

سیستم اندروید خود نیز محتوا و resource ارائه می دهد. به این محتویات و منابع system resources گفته می شود. فایل های resource که خود سیستم در اختیار برنامه نویس قرار می دهد توسط پیشوند android از دیگر فایل های محتوا (local resource) متمایز می شوند. به عنوان مثال، android.R.string.cancel یک string است که محیط اندروید (platform) ویژه ی عملیات cancel تعریف می کند.

مفهوم view در اندروید – المان ها و ابزارک های رابط کاربری یا UI Widget

همان طور که می دانید یک اپلیکیشن اندروید دارای یک یا چند activity هست. Activity همان فرم یا پنجره در برنامه های تحت ویندوز است. حال داخل هر activity شما می توانید المان های رابط کاربری همچون دکمه، کادر متن و غیره داشته باشید. این اجزا رابط کاربری در واقع نمونه هایی از کلاس view یا subclass های (کلاس های ارث بری شده از) ViewGroup هستند.
به عبارت دیگر view کلاس پدر (superclass) است که تمامی کامپوننت های GUI در اندروید از آن ارث بری می شوند. به عنوان مثال، کلاس TextView که یک برچسب متنی را در UI به نمایش می گذارد یک کلاس فرزند از View است (ViewGroup نیز یک کلاس مشتق شده از View است. از خود ViewGroup آبجکت هایی ساخته می شود که این آبجکت ها نقش ظرف را برای گروه بندی نمونه های کلاس View ایفا می کند. به عنوان مثال می توان به کلاس LinearLayout اشاره کرد که یک کلاس فرزند از ViewGroup است.)
هر view در اندروید نماینده ی یک widget (ابزارک یا المان کاربری) همچون دکمه یا یک layout manager هست. SDK سیستم اندروید این ابزارک یا المان های رابط کاربری را از طریق کلاس Button، TextView و EditText در اختیار شما قرار می دهد (ListView که لیستی از آیتم ها را در نمایشگر به صورت فهرست ارائه می دهد) .
تمامی view ها از کلاس android.view.View ارث برده می شوند. این کلاس پدر، بسیار سنگین و حاوی حدودا 18 هزار خط کد است که قابلیت های پایه ای مختلفی را در اختیار کلاس های فرزند خود قرار می دهد.
کلاس های پایه ی view ها همگی در پوشه ی android.view قرار دارند و widget های پیش فرض محیط اندروید (platform) داخل پوشه ی android.widget.

مقادیر Border-style

استفاده از layout manager

Layout manager وظیفه ی تنظیم ظاهر خود و مدیریت چیدمان view های فرزندش را بر عهده دارد. در واقع Layout manager یک کلاس مشتق شده از ViewGroup است.
Layout manager های متعددی در سیستم اندروید تعبیه شده که در زیر به پرکاربردین آن ها اشاره می شود:

  • ConstraintLayout - توسط یک کتابخانه ی خارجی به اندروید اضافه می شود.
  • LinearLayout
  • FrameLayout
  • RelativeLayout
  • GridLayout

تنظیم و ویرایش layout manager ها از طریق attribute ها

تمامی layout manager ها را می توان با ویرایش مقادیر attribute به آسانی طبق نیاز تنظیم کرد. View های موجود در layout manager می توانند attribute هایی داشته باشند و از طریق آن ها ظاهر خود همچون اندازه ی عرض و طول را مشخص کنند.
View های موجود در layout manager می توانند طول و عرض مد نظر خود را به واسطه ی attribute های زیر تنظیم کنند.

  • android:layout_width : عرض widget را تعیین می کند.
  • android:layout_height : طول widget را مشخص می کند.

اندازه ی layout manager ها را می توان بر حسب واحد های اندازه گیری متعارف مشخص نمود یا مقادیر آماده و از پیش تعریف شده ی layout را مورد استفاده قرار داد. مثال: 100dp.
مقدار match_parent به اپلیکیشن دستور می دهد widget موجود در layout manager (یا view پدر) را دقیقا از لحاظ اندازه با view پدر (میزبان) برابر قرار دهد. در مقابل این پارامتر، مقدار wrap_content وجود دارد که به layout اعلان می کند تنها به میزان مورد نیاز به widget فضا تخصیص دهد. در تصویر زیر اثر هر دو پارامتر به نمایش گذاشته شده است.

تنظیم و ویرایش layout manager

Constraint Layout

Constraint layout یکی از ابزار کنترل ظاهر و چیدمان المان های UI است که توسط کتابخانه ی خارجی در اختیار توسعه دهنده قرار می گیرد. این نوع layout به شما امکان استفاده از view hierarchy تخت و flat را می دهد که در افزایش سرعت اجرای اپلیکیشن بسیار موثر است. علاوه بر آن تمامی ابزارهای طراحی (design tool) به راحتی از constraint layout پشتیبانی می کنند. در پروژه های جدید بهتر است که از constraint layout برای طراحی ظاهر اپلیکیشن استفاده شود.
در واقع با constraint layout می توان قالب های انعطاف پذیر، واکنشگرا و پیچیده (تودرتو) تعریف کرد که علاوه بر قابلیت تطبیق خودکار خود با نمایشگرهای مختلف و تغییر جهت نمایش یا وضعیت چیدمان، می تواند سرعت بالایی داشته باشد.

FrameLayout

FrameLayout یک layout manager است که تمامی المان های داخل خود (child element) را بر روی هم ترسیم می کند. این به شما امکان می دهد جلوه های بصری و افکت های جالب طراحی کنید.
تصویر زیر اپلیکیشن Gmail را به نمایش می گذارد که با استفاده از FrameLayout چندین دکمه را بر روی layout دیگر قرار می دهد. در این layout المان ها می توانند بر روی یکدیگر قرار گیرند.

FrameLayout

LinearLayout

LinearLayout تمامی المان های داخل خود را، بر اساس مقدار خصیصه ی orientation، دورن یک ستون یا سطر واحد قرار می دهد. در واقع با استفاده از این layout المان های فرزند همگی پشت سرهم در یک مسیر قرار می گیرند. همان طور که گفته شد، این layout یک attribute به نام orientation دارد که می توان آن را با دو مقدار مختلف تنظیم کرد: vertical و horizontal. مقدار horizontal که المان مربوطه را به صورت افقی نمایش می دهد، حالت پیش فرض می باشد.
در صورت مقداردهی attribute نام برده با horizontal، المان های داخل layout manager به صورت زیر در نمایش گر ارائه می شوند.

LinearLayout

در صورت تنظیم مقدار attribute بر روی vertical، المان های داخل layout manager به صورت زیر در نمایشگر نشان داده می شود:

LinearLayout

LinearLayout را می توان در حالت nested و تودرتو بکار برد. به عبارت دیگر این امکان وجود دارد که با تعریف کردن چند layout داخل یکدیگر، قالب های پیچیده و جالب تر ایجاد نمود.
در LinearLayout شما می توانید اندازه ی هر یک از المان های حاضر در layout manager را با مقداردهی خصیصه ی android:layout_weight تنظیم نمایید. این مقدار مشخص می کند چه میزان از فضای اضافی موجود به هر یک از المان ها اختصاص داده شود. برای مثال، چنانچه در قالب خود دو widget داشته باشید و خصیصه ی layout_weight یکی را با 1 و دیگری را با 2 مقداردهی کنید، در آن صورت اولین المان 3/1 فضای موجود را می گیرد و دومین المان 3/2 فضا را به خود اختصاص می دهد. همچنین می توانید با قرار دادن مقدار layout_width بر روی 0 یک نسبت مشخص را رعایت کنید.
Inflate کردن: تبدیل فایل LAYOUT XML به کلاس view جهت قرار گرفتن در کلاس ACTIVITY.

RelativeLayout

در این نوع layout، المان های رابط کاربری (widget) نسب به محل قرارگیری یکدیگر چیده می شوند. relativelayout را می توانید برای ساخت رابط های کاربری پیچیده مورد استفاده قرار دهید. در واقع RelativeLayout یک layout manager پیچیده و قدرتمند است که فقط باید در شرایط پیچیده مورد استفاده قرار گیرد زیرا این قالب برای چیدمان و تنظیم ظاهر المان های داخل خود به منابع زیاد و محاسبات سنگین احتیاج دارد.
یکی از موارد استفاده ی RelativeLayout زمانی است که می خواهید فقط یک کامپوننت را در مرکز صفحه قرار دهید. برای این منظور کافی است یک کامپوننت به RelativeLayout اضافه نموده و مقدار خصیصه ی android:layout_centerInParent را بر روی true تنظیم کنید.



                

GridLayout

GridLayout برای اولین بار در ویرایش 4.0 اندروید ارائه شد. layout نام برده به شما این امکان را می دهد تا فضای جاری را خانه بندی کنید و هر view می تواند یک یا چند خانه را اشغال کند. در واقع GridLayout قالب را مانند یک جدول به خانه، سطر و ستون تقسیم بندی می کند.
به وسیله ی این layout manager شما می توانید دقیقا تعیین کنید هر View چند ستون را به خود تخصیص دهد، در کدام سطر و ستون قرار گیرد و در نهایت چند سطر و ستون را اشغال کند. اگر خودتان به صورت صریح مشخص نکنید، در آن صورت GridLayout مقادیر پیش فرض را تخصیص می دهد. برای مثال، به هر view یک ستون و یک سطر اختصاص می یابد و محل view نیز به ترتیبی که در کد تعریف کردید مشخص می شود.
فایل XML زیر یک قالب با GridLayout تعریف می کند.



                
                
    
                
                
    
                
                

این کد ظاهری مشابه آنچه در تصویر زیر مشاهده می کنید را تعریف می کند.

GridLayout

ScrollView

گاهی لازم است تمامی view ها را در UI به نمایش بگذارید، حتی اگر فضای کافی برای نمایش آن ها وجود نداشته باشد. در صورتی که view بیش از حد بزرگ باشد، آنگاه ScrollView یک نوار پیمایش به صفحه اضافه نموده و به شما امکان می دهد به وسیله ی آن کل محتوا یا المان مورد نظر را (با کشیدن نوار به سمت چپ یا راست) در نمایشگر مشاهده نمایید. لازم به ذکر است که ScrollView یا HorizontalScrollView هیچ یک layout manager محسوب نمی شوند، بلکه خود می توانند یک view میزبان باشند و آن view تعدادی فرزند در خود داشته باشد.

 ScrollView

در زیر یک فایل XML مشاهده می کنید که در آن از ScrollView (جهت نمایش کل محتوای صفحه با نوار پیمایش) استفاده شده است.



                
    

خصیصه ی "true" android:fillViewport=سبب می شود که ScrollView کل صفحه را در بر گیرد حتی اگر المان ها کوچکتر از کل صفحه باشند و اساسا نیازی به نوار پیمایش وجود نداشته باشد.

تمرین: ویرایش view layout (تنظیم چیدمان المان های رابط کاربری) در زمان اجرا

در این تمرین شما تعدادی radio button به قالب (layout) اپلیکیشن که در تمرین قبلی ایجاد کردید، اضافه خواهید نمود. بسته به انتخابی که کاربر می کند، چیدمان دکمه از افقی به عمودی و بالعکس تغییر می کند.

افزودن radio group و radio button به قالب/layout

فایل layout را باز نمایید و سپس یک radio group با دو radio button به قالب برنامه ی خود اضافه نمایید.
شناسه ی المان ها را بر اساس جدول زیر مقداردهی کنید.

جدول تخصیص IDبه المان ها
View
ID
Radio Group
orientation
First radio button
horizontal
Second radio button
vertical

در حال حاضر کد موجود در فایل XML می بایست به صورت زیر باشد. با کمی دقت متوجه می شود که تنها تگ RadioGroup در این layout جدید می باشد.


                
                
                
                
        
                
        
    

کد فوق خروجی زیر را در UI به نمایش می گذارد:

افزودن radio group و radio button به قالب/layout

ویرایش orientation/وضعیت چیدمان radio group در زمان اجرا (به صورت dynamic)

تابع onCreate() را در کلاس activity ویرایش نمایید. سپس با فراخوانی متد findViewById() کلاس RadioGroup را در فایل layout (فایل xml که ظاهر برنامه را تعریف می کند) پیدا کنید.
یک Linstener داخل radio group پیاده سازی نمایید که به تغییرات گوش فرا داده و وضعیت چیدمان یا orientation دکمه را بر اساس انتخاب جاری کاربر تغییر دهد. اینکه کدام دکمه انتخاب شده را می توان توسط پارامتر ID تشخیص داد.
RadioGroup را در قالب متغیر در کلاس activity خود اعلان نمایید. سپس RadioGroup.OnCheckedChangeListener را به واسطه ی متد setOnCheckedChangeListener() از پکیج android.widget.RadioGroup اضافه نمایید. این متد (listener) متنظر انتخاب کاربر می ماند و به محض رخداد اتفاق مورد نظر (تغییر انتخاب کاربر) از آن مطلع شده و متعاقبا دستورات پیاده سازی شده در onCheckedChanged را اجرا می کند.
می توانید از قالب آماده ی زیر به عنوان الگو جهت پیاده سازی listener استفاده نمایید.

final RadioGroup group1 = (RadioGroup) findViewById(R.id.orientation);
group1.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch (checkedId) {
                        case R.id.horizontal:
                                group.setOrientation(LinearLayout.HORIZONTAL);
                                break;
                        case R.id.vertical:
                                group.setOrientation(LinearLayout.VERTICAL);
                                break;
                }
        }
});

تست اپلیکیشن

برنامه ی خود را اجرا نموده و انتخاب خود را تغییر دهید. بایستی بر اساس گزینه ی مورد انتخاب orientation دکمه ها تغییر کند.

دسترسی به محتوای static و استفاده از آن

دسترسی به فایل های محتوا (resources) از طریق کلاس Resources

کلاس Resources به شما اجازه می دهد به منابع و محتوای اپلیکیشن خود به صورت مجزا و فردی دسترسی داشته باشید. می توانید با فراخوانی متد getResources() از کلاس Context به راحتی به نمونه ی کلاس Resources دسترسی داشته باشید. از آنجایی که کلاس های activity و service همگی از (property ها و متدهای کلاس) Context ارث بری دارند، شما می توانید این متد را مستقیما در پیاده سازی های این کامپوننت ها بکار ببرید.
سایر کلاس های framework اندروید نیز به نمونه ای از کلاس Resources احتیاج دارند. برای مثال، کد زیر برای شما نمایش می دهد چگونه یک فایل Bitmap از ID اشاره گر ایجاد نمایید.

// BitmapFactory requires an instance of the Resource class
BitmapFactory.decodeResource(getResources(), R.drawable.ic_action_search);

دسترسی به view ها از layout در کلاس activity

طبیعتا برای تنظیم ظاهر view ها، شما لازم دارید که در کد activity و fragment به آن ها دسترسی داشته و property های آن ها را ویرایش نمایید.
جهت دسترسی به view مورد نظر از layout جاری، کافی است متد findViewById(id) را فراخوانی نمایید. پارامتر ورودی id در واقع اشاره به خصیصه ی ID از view مورد نظر در فایل layout دارد. کد زیر کاربرد این متد را به نمایش می گذارد.

@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView textView = (TextView) findViewById(R.id.mytext);
    // TODO do something with the TextView
}

همچنین این امکان وجود دارد که به وسیله ی متد findViewById(id)، در یک view hierarchy (view های تودرتو در فایل layout) به آسانی view مد نظر را پیدا کرده و به آن دسترسی داشت.
همچنین می توانید یک متد کمکی (utility method) تعریف کنید و به وسیله ی آن آسان تر به view دلخواه دسترسی داشته باشید.

package com.example.android.test;
import android.app.Activity;
import android.view.View;
public class UiUtils {
   public static  T findView(View root, int id)      {
      return (T) root.findViewById(id); }
   public static  T findView(Activity activity, int id)      {
      return (T) activity.getWindow().getDecorView().getRootView().findViewById(id); }
}
// search in the layout of the activity
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.mylayout);
// afterwards search in linearLayout for another view
TextView textView = (TextView) linearLayout.findViewById(R.id.mytext);
// note, you could have directly searched for R.id.mytext, the above coding
// is just for demonstration purposes
package com.example.android.test;
import android.app.Activity;
import android.view.View;
public class UiUtils {
   public static  T findView(View root, int id)      {
      return (T) root.findViewById(id); }
   public static  T findView(Activity activity, int id)      {
      return (T) activity.getWindow().getDecorView().getRootView().findViewById(id); }
}

دسترسی به محتوای مورد نظر در فایل های XML از دیگر فایل های resource

در فایل های XML خود، برای مثال فایل های layout اپلیکیشن، می توانید به سایر resource ها اشاره کرده و در واقع از داخل فایل مورد نظر به آن ها دسترسی داشته باشید. این کار از طریق درج علامت @ صورت می پذیرد.
برای مثال، جهت دسترسی به مقدار color که در یک فایل XML (resource file) تعریف شده، کافی است این ساختار نگارشی را بکار ببرید: @color/your_id. همچنین ممکن است قبلا یک String با ID یا شناسه ی "titlepage" در فایل XML تعریف کرده باشید و اکنون می خواهید به آن دسترسی داشته باشید. می توانید با دستور @string/titlepage به راحتی به آن متغیر دسترسی داشته باشید.
به منظور دسترسی به محتوایی که خود سیستم اندروید ارائه می دهد (system resource)، لازم است namespace یا پوشه ی android را در اشاره گرها (id هایی که برای دسترسی به آن منبع مورد استفاده قرار می دهید) لحاظ نمایید (مثال: android.R.string.cancel).

استفاده از پوشه ی assets و دسترسی به داده های ذخیره شده در آن

در سیستم اندروید، پوشه ای به نام res تعریف شده که دربردارنده ی مقادیر ساخت یافته و سازماندهی شده (با semantics و معانی از پیش تعریف شده) ویژه ی محیط کاری اندروید است. هر نوع داده ای را می توان در این پوشه ذخیره کرد. شما می توانید به فایل های ذخیره شده در پوشه، بر اساس محل قرارگیری آن فایل دسترسی داشته باشید. داخل این پوشه ی assets همچنین می توانید زیرپوشه داشته باشید. برای نگهداری داده هایی که با ساختار مشخصی سازمان دهی و ذخیره نشده اند (unstructured data)، می توانید از پوشه ی /res/raw استفاده نمایید. هر چند بهتر است این نوع اطلاعات را نیز در همان پوشه ی assets ذخیره نمایید (منابعی که در پوشه ی res ذخیره می شود برای کاربر قابل دسترسی هستند).
می توانید با فراخوانی متد getAssets() که نمونه ای از کلاس AssetManager را برمی گرداند، به فایل های خام ذخیره شده در پوشه ی/res/raw دسترسی داشته باشید. این متد از کلاس انتزاعی Context برگرفته شده است.
در زیر یک آبجکت از کلاس AssetsManager ایجاد می کنید که این کلاس اجازه ی دسترسی به فایل های خام مستقر در پوشه ی assets را می دهد. اسم این آبجکت را manager انتخاب می کنید. سپس با فراخوانی متد getAssets() نمونه ای از کلاس AssetsManager را برمی گردانید. از کلاس InputStream یک آبجکت به نام open ایجاد می کنید. سپس متد open() را بر روی آبجکت ایجاد شده از کلاس InputStream فراخوانی می کنید و اسم فایل مورد نظر را به عنوان پارامتر ورودی به متد open() پاس می دهید. این متد فایل را می خواند و در آبجکت open از کلاس InputStream می ریزد.

// get the AssetManager
AssetManager manager = getAssets();
// read the "logo.png" bitmap from the assets folder
InputStream open = null;
try {
        open = manager.open("logo.png");
        Bitmap bitmap = BitmapFactory.decodeStream(open);
        // assign the bitmap to an ImageView in this layout
        ImageView view = (ImageView) findViewById(R.id.imageView1);
        view.setImageBitmap(bitmap);
        } catch (IOException e) {
                e.printStackTrace();
        } finally {
                if (open != null) {
                        try {
                                open.close();
                        } catch (IOException e) {
                                e.printStackTrace();
                        }
                }
}

تمرین: استفاده از محتوا/resource در فایل های XML و در کد

افزودن عکس به اپلیکیشن

در این تمرین نیز اپلیکیشن قبلی را ادامه می دهید. دو تصویر جدید ایجاد می کنید و آن را به پروژه ای به نام ic_tethering و ic_offline اضافه می نمایید.

افزودن view جدید به پروژه

فایل layout خود را باز نموده و یک تگ Button و ImageView به آن اضافه نمایید. سپس فایل ic_offline را از طریق فایل layout به ImageView اضافه کنید.

                    

جایگزین کردن عکس ها با کلیک بر روی دکمه

زمانی که بر روی دکمه کلیک می شود، با استفاده از متد findViewById() به ImageView دسترسی پیدا می کنید. سپس با استفاده از متد SetImageResource() فایل png را (که در زمان اجرای برنامه به صورت یک آبجکت Drawable نمایش داده می شود) به ImageView خود اضافه نمایید. پارامتر ارسال شده به متد SetImageResource() یک شناسه یا ID است که به فایل R.drawable.your_png_file اشاره دارد و شناسه ی متناظر فایل مورد نظر می باشد.

تست اپلیکیشن

برنامه را اجرا نمایید. حال بر روی دکمه کلیک کنید. در پی کلیک بر روی دکمه ی جدید، تصویری که در UI قابل مشاهده می باشد باید با تصویر دیگری جایگزین شود.

تمرین: استفاده از ScrollView در پروژه

در این تمرین یک کلاس ScrollView به پروژه اضافه می کنید که یک نوار پیمایش به اپلیکیشن اضافه نموده و امکان مشاهده ی تمامی بخش های view را در صفحه ی نمایشگر برای کاربر فراهم می آورد. یک پروژه اندروید به نام de.vogella.android.scrollview ایجاد کرده و سپس کلاس activity با نام ScrollViewActivity را به آن اضافه نمایید.
activity_main.xml را به عنوان فایلی که اپلیکیشن ظاهر برنامه را بر اساس آن طراحی می کند (layout)، انتخاب نمایید.
فایل layout مزبور را که در activity خود فراخوانی می کنید، به صورت زیر ویرایش نمایید:



                
                
        
                
        
                
                
                
        
    

کد کلاس ScrollViewActivity را به صورت زیر ویرایش نمایید.

package de.vogella.android.scrollview;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class ScrollViewActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView view = (TextView) findViewById(R.id.TextView02);
        String s="";
        for (int i=0; i < 500; i++) {
                s += "vogella.com ";
        }
        view.setText(s);
    }
}

اپلیکیشن خود را اجرا کنید. با توجه به کدی که برای برنامه نوشته اید، بایستی بتوانید با استفاده از نوار پیمایش به پایین صفحه دسترسی داشته و دکمه ها را مشاهده نمایید.

تست اپلیکیشن

اکنون می بایست با کلیک بر روی دکمه ی جدید، تصویر قابل مشاهده در نمایشگر را جایگزین نمایید.

تست اپلیکیشن

تمرین: نوشتن برنامه ی تبدیل دما

در طی این تمرین شما نحوه ی ایجاد و استفاده از resource و محتوای اندروید را خواهید آموخت.
این اپلیکیشن از قبل نوشته شده و به صورت آماده در آدرس http://play.google.com/store/apps/details?id=de.vogella.android.temperature از طریق Google Play قابل دسترسی می باشد.
می توانید با گوشی اندروید خود بارکد زیر را اسکن کرده، سپس برنامه ی تبدیل دما را از طریق اپلیکیشن Google Play دانلود و نصب نمایید.

نوشتن برنامه ی تبدیل دما

ساخت پروژه

یک پروژه ی جدید اندروید بر اساس پارامتر های ارائه شده در جدول زیر ایجاد نمایید.

Table 7. New Android project
Value
Property
Temperature Converter
Application Name
com.vogella.android.temperatureconverter
Package name
Latest
API (Minimum, Target, Compile with)
Empty Activity
Template
MainActivity
Activity
activity_main
Layout

ایجاد attribute ها

جهت ویرایش فایل res/values/strings.xml آن را انتخاب و سپس بر روی آن دابل کلیک نمایید. دو متغیر Color و String بر اساس جدول زیر اضافه نمایید.

Table 8. New attributes to add
Value
Name
Type
#F5F5F5
myColor
Color
to Celsius
celsius
String
to Fahrenheit
fahrenheit
String
Calculate
calc
String

مقادیر می بایست به صورت زیر در فایل XML درج شود.



                Temperature Converter
                Settings
                Hello world!
                #F5F5F5
                to Celsius
                to Fahrenheit
                Calculate

ایجاد فایل Layout و تنظیم کننده ی ظاهر اپلیکیشن

فایل res/layout/activity_main.xml را انتخاب نموده و با دوبار کلیک بر روی آن ویرایشگر متناظر را باز نمایید.
تمامی view ها را از layout حذف نمایید. این کار را می توانید یا به طور مستقیم از طریق فایل XML و یا به وسیله ی ویرایشگر گرافیکی انجام دهید.
سپس یک LinearLayout اضافه نموده و بعد از آن یک LinearLayout دیگر با ViewText و EditText به عنوان فرزند در داخل آن تعریف کنید.
پس از آن یک RadioGroup به همراه دو radio button به layout خود اضافه نمایید. این کار را می توانید یا از طریق فایل XML و یا ویرایشگر گرافیکی انجام دهید. یک روش ساده برای سازمان دهی کامپوننت ها این است که آن ها را با اشاره گر موس کشیده و بر روی Component Tree view جایگذاری نمایید.
خروجی می بایست به صورت زیر باشد.

ایجاد فایل Layout ایجاد فایل Layout

اکنون بر روی تب XML فایل layout خود کلیک نمایید. آن را با کد زیر تطبیق داده و از مشابه بودن آن اطمینان حاصل نمایید.

توجه:

تیم توسعه دهندگان ابزار اندروید این کد را هر چند وقت یکبار تغییر می دهند، به همین خاطر اگر فایل XML شما کمی متفاوت بود، جای تعجب نیست.


                
                
                
                
    
                

توجه:

با تعدادی پیغام هشدار مواجه می شوید. این خطاها را در بخش بعدی تمرین برطرف خواهید نمود.

ویرایش مقادیر property های view

نسخه ی XML فایل را باز نمایید و مقدار @string/Celsius را به property یا خصوصیت android:text از اولین radio button تخصیص دهید. سپس رشته ی farenhiet را به خصوصیت text از دومین radio button انتساب دهید.

ویرایش مقادیر property های view

مقدار خصوصیت Checked را بر روی true تنظیم نمایید و سپس مقدار onClick را به خوصیصت onClick اختصاص دهید.
مقدار @string/calc را به خصوصیت text اولین دکمه اختصاص داده، سپس مقدار onClick را به خصوصیت onClick انت
ساب دهید. خوصیصت inputType را در EditText با numberSigned و numberDecimal مقداردهی نمایید. این اصلاحات در فایل XML زیر قابل مشاهده می باشد. در پایان ID آن را به "InputValue" تغییر دهید.


تمامی کامپوننت های UI در یک layout با فرمت XML تعریف می شوند. رنگ پس زمینه (background color) را نیز در این فایل اضافه نمایید.
Color را انتخاب نموده و سپس myColor را در کادر محاوره ای انتخاب نمایید. رنگ پس زمینه ی UI در فایل XML به صورت زیر در آخرین خط تنظیم می شود.


پس از افزودن این خط کد، پس زمینه بایستی با رنگ whitesmoke تنظیم شود.هر چند تشخیص این تغییر ممکن است با توجه به رنگ انتخابی کمی دشوار باشد.
حال بر روی تب activity_main.xml کلیک نموده و با بررسی آن از صحیح بودن کامل کد اطمینان حاصل نمایید.

                
                
                
                
                
    
                

تعریف یک کلاس کمکی (utility class)

یک کلاس تعریف کرده و در آن کد لازم برای انجام عملیات تبدیل از واحد سلسیوس به فارانهایت و بالعکس را بنویسید.

package com.vogella.android.temperatureconverter;
public class ConverterUtil {
        // converts to celsius
        public static float convertFahrenheitToCelsius(float fahrenheit) {
                return ((fahrenheit - 32) * 5 / 9);
        }
        // converts to fahrenheit
        public static float convertCelsiusToFahrenheit(float celsius) {
                return ((celsius * 9) / 5) + 32;
        }
}

ویرایش کد activity

کد موجود در کلاس MainActivity را به صورت زیر ویرایش کنید:

package com.vogella.android.temperatureconverter;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.Toast;
public class MainActivity extends Activity {
  private EditText text;
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    text = (EditText) findViewById(R.id.inputValue);
  }
  // this method is called at button click because we assigned the name to the
  // "OnClick" property of the button
  public void onClick(View view) {
    switch (view.getId()) {
    case R.id.button1:
      RadioButton celsiusButton = (RadioButton) findViewById(R.id.radio0);
      RadioButton fahrenheitButton = (RadioButton) findViewById(R.id.radio1);
      if (text.getText().length() == 0) {
        Toast.makeText(this, "Please enter a valid number",
            Toast.LENGTH_LONG).show();
        return;
      }
      float inputValue = Float.parseFloat(text.getText().toString());
      if (celsiusButton.isChecked()) {
        text.setText(String    .valueOf(ConverterUtil.convertFahrenheitToCelsius(inputValue)));
        celsiusButton.setChecked(false);
        fahrenheitButton.setChecked(true);
      } else {
        text.setText(String       .valueOf(ConverterUtil.convertCelsiusToFahrenheit(inputValue)));
        fahrenheitButton.setChecked(false);
        celsiusButton.setChecked(true);
      }
      break;
    }
  }
}

راه اندازی اپلیکیشن

اپلیکیشن اندروید خود را راه اندازی نموده و یک عدد جهت تبدیل در آن وارد نمایید. سپس تبدیل را انتخاب نموده و دکمه ی مربوطه را کلیک نمایید. پس از مشاهده ی نتیجه گزینه ی اول، جهت اطمینان حاصل نمودن از عملکرد صحیح برنامه در تبدیل بالعکس، گزینه ی دیگر را انتخاب نمایید.

راه اندازی اپلیکیشن

فرایند آماده سازی، عرضه، توزیع و نصب اپلیکیشن (Deployment)

نحوه ی آماده سازی و عرضه ی اپلیکیشن برای نصب

روش های مختلفی برای نصب اپلیکیشن بر روی دستگاه وجود دارد. شما می توانید اپلیکیشن را از طریق USB و در حالت تست بر روی دستگاه مستقر نمایید یا آن را از طریق ایمیل به خود ارسال نموده و نصب کنید و یا اپلیکیشن را بر روی فروشگاه های مجازی عرضه ی اپلیکیشن های تحت موبایل اندروید بارگذاری نموده و از آنجا امکان دانلود و نصب آن را فراهم نمایید. در زیر روش های معمول و پرطرفدار عرضه و نصب اپلیکیشن تشریح شده اند.

مشخص کردن اجزا نرم افزاری و سیستم سخت افزاری مورد نیاز برای اپلیکیشن

شما می توانید با تعریف تگ در فایل تنطیمات اندروید (manifest) مشخص نمایید اپلیکیشن شما برای اجرای موفقیت آمیز بر روی دستگاه به چه ابزاری نیاز دارد. با تنظیم مقدار خصیصه ی (attribute) android:required بر روی true در واقع شما به دستگاه اعلان می کنید که برای اجرای اپلیکیشن بایستی از سخت افزار و نرم افزار مربوطه برخوردار باشد یا چنانچه آن ویژگی در دستگاه تعبیه شده باشد برنامه بهتر کار می کند اما در عین حال به گونه ای طراحی شده که بتواند بدون حضور آن ویژگی نیز با موفقیت اجرا شود. برای مثال، اپلیکیشنی را در نظر بگیرید که برای عملکرد خود به یک حسگر یا دوربین احتیاج دارد. کافی است تگ نام برده را در فایل تنظیمات این برنامه تعریف کرده و مقدار خصیصه ی android:required آن را بر روی true تنظیم نمایید.

Sign کردن (تخصیص امضای الکترونیکی جهت دیباگ) اپلیکیشن قبل از انتشار و عرضه ی آن در فروشگاه های مجازی

اپلیکیشن های اندروید بایستی قبل از اینکه بر روی دستگاه نصب شوند، امضا شده و کلید یا امضای الکترونیکی منحصربفردی به آن اختصاص یابد. به هنگام ساخت و توسعه ی اپلیکیشن، پروسه ی کامپایل و build برنامه ی شما را با یک debug key (امضای الکترونیکی جهت دیباگ) امضا می کند.
جهت نصب اپلیکیشن اندروید، شما می بایست فایل apk اندروید را با یک کلید منحصر بفرد (signature key) که به صورت خودکار تولید می شود، امضا نمایید.
لازم به ذکر است که برای بروز رسانی اپلیکیشن خود، می بایست از همان signature keyدر فروشگاه مجازی Google Play استفاده نمایید. اگر این کلید منحصربفرد را از دست بدید، دیگر هیچ وقت نمی توانید برنامه ی خود را بروز رسانی کنید. توصیه می شود از این کلید نسخه ی پشتیبان تهیه نمایید.

خروجی امضا شده دادن (Export) اپلیکیشن از طریق محیط کاری Android Studio

جهت خروجی دادن اپلیکیشن از داخل محیط Android Studio منوی اصلی را باز نموده و سپس مسیر روبرو را طی نمایید: Build ▸ Generate Signed APK.

خروجی امضا شده دادن/Export اپلیکیشن از طریق محیط برنامه نویسی (IDE) Eclipse

جهت خروجی دادن اپلیکیشن از محیط کاری Eclipse، کافی است بر روی آن راست کلیک کرده و سپس این مسیر را طی نمایید: Android Tools ▸ Export Signed Application Package.
ویزارد به شما اجازه می دهد یک کلید جدید ایجاد کنید یا همان کلید از پیش آماده را مورد استفاده قرار دهید.

نصب اپلیکیشن از روش های دیگر

اندروید به شما اجازه می دهد تا اپلیکیشن را به طور مستقیم نصب نمایید. کافی است بر روی لینکی که در یک پیوست ایمیل یا صفحه ی وب به فایل .apk اشاره دارد، کلیک کنید. اندروید از شما می پرسد آیا مایلید اپلیکیشن را نصب نمایید یا خیر.
البته برای این منظور می بایست به بخش تنظیمات دستگاه مراجعه نموده و اجازه ی نصب اپلیکیشن هایی که خارج از فروشگاه های مجازی معتبر عرضه می شود را به طور صریح اعطا نمایید. می توانید به گزینه ی مورد نظر در بخش Security تنظیمات دستگاه خود دسترسی داشته باشید.

فروشگاه مجازی Google Play

جهت عرضه ی اپلیکیشن های اندرویدی خود در Google play می بایست مبلغ 25 دلار را برای یکبار پرداخت کنید. پس از پرداخت این مبلغ می توانید برنامه های خود را به همراه آیکون های مربوطه تحت آدرس https://play.google.com/apps/publish مسقیما در Google Play بارگذاری نمایید.
گوگل ابتدا برنامه را اسکن کرده و از عدم وجود بدافزار در آن اطمینان حاصل می کند. معمولا چند دقیقه پس از بارگذاری، اپلیکیشن برای دانلود و نصب در دسترس قرار می گیرد.

1395/10/08 13603 2232
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...